"""
AI助手提示词模块
包含各种场景下的提示词模板
"""

# 系统提示词
SYSTEM_PROMPT = """
你是一个专业的智能客服助手，隶属于一家大型电商平台。你的主要职责是：

1. 为用户提供友好、专业的客户服务
2. 协助用户解决购物、订单、配送等相关问题
3. 提供商品推荐和购物建议
4. 处理用户投诉和反馈
5. 在必要时将复杂问题转接给人工客服

请始终保持：
- 友好耐心的服务态度
- 专业准确的回答
- 简洁明了的表达
- 积极主动的问题解决思路

当用户询问订单、商品、政策等具体信息时，请使用相应的工具进行查询。
"""

# 客服对话提示词
CUSTOMER_SERVICE_PROMPT = """
作为专业的电商客服，请根据用户的问题提供准确的帮助。

用户问题：{user_query}

请分析用户问题的类型，并提供相应的回复。如果涉及：
- 订单查询：使用订单查询工具
- 商品咨询：提供商品信息和推荐
- 政策询问：查询相关政策信息
- 投诉建议：表示理解并提供解决方案
- 其他问题：给出通用性的帮助建议

回复时请保持专业和友好的语气。
"""

# 情绪分析提示词
SENTIMENT_ANALYSIS_PROMPT = """
请分析以下用户消息的情绪色彩：

用户消息：{message}

请从以下维度分析：
1. 情绪类型（积极/消极/中性）
2. 情绪强度（1-10分）
3. 主要情绪词汇
4. 潜在需求或问题
5. 建议的回复策略

请以JSON格式返回分析结果。
"""

# 问题分类提示词
QUERY_CLASSIFICATION_PROMPT = """
请将以下用户问题分类到合适的类别：

用户问题：{query}

可选分类：
- 订单相关（订单查询、修改、取消）
- 商品相关（商品咨询、推荐、对比）
- 配送相关（物流查询、配送时间、地址修改）
- 售后相关（退换货、维修、质量问题）
- 支付相关（支付方式、发票、优惠券）
- 账户相关（注册、登录、密码、会员）
- 政策相关（服务条款、隐私政策、退货政策）
- 投诉建议（服务投诉、产品建议、体验反馈）
- 其他问题

请返回：
1. 主要分类
2. 次要分类（如果适用）
3. 问题关键词
4. 紧急程度（低/中/高）
"""

# 商品推荐提示词
PRODUCT_RECOMMENDATION_PROMPT = """
基于用户的购买历史和当前需求，提供个性化商品推荐：

用户购买历史：{purchase_history}
当前需求：{current_need}

请推荐合适的商品，包括：
1. 推荐商品列表（名称、价格、特点）
2. 推荐理由
3. 搭配建议
4. 购买建议

请确保推荐的商品符合用户的购买偏好和预算范围。
"""

# 订单查询提示词
ORDER_INQUIRY_PROMPT = """
用户查询订单信息，请提供详细的订单状态：

订单号：{order_id}
用户邮箱：{user_email}

请返回：
1. 订单基本信息
2. 商品详情
3. 订单状态
4. 物流信息
5. 预计送达时间
6. 相关操作建议

如果订单不存在，请给出友好的提示和建议。
"""

# FAQ回答提示词
FAQ_RESPONSE_PROMPT = """
用户提出了一个常见问题，请提供准确的回答：

用户问题：{question}

请基于以下知识库提供回答：
- 配送政策：全国包邮，1-3天送达
- 退货政策：7天无理由退货
- 支付方式：支持微信、支付宝、银行卡
- 客服时间：9:00-21:00
- 会员权益：积分返还、专属优惠、优先客服

请提供：
1. 直接回答
2. 详细说明
3. 相关链接或操作指引
4. 补充信息
"""

# 人工转接提示词
HUMAN_ESCALATION_PROMPT = """
用户问题需要转接人工客服，请生成转接信息：

用户问题：{issue}
问题类型：{issue_type}
用户情绪：{sentiment}

请生成：
1. 转接工单号
2. 问题摘要
3. 优先级设置
4. 预计等待时间
5. 转接原因说明

确保信息完整准确，便于人工客服快速了解情况。
"""

# 满意度调查提示词
SATISFACTION_SURVEY_PROMPT = """
用户完成了满意度评价，请生成相应的回复：

评分：{rating}/5
反馈：{feedback}

请生成：
1. 感谢消息
2. 针对性回复
3. 改进承诺（如果评分较低）
4. 后续服务建议

保持真诚和专业的语气。
"""

# 智能回复建议提示词
SMART_REPLY_SUGGESTIONS_PROMPT = """
针对用户的问题，生成多个智能回复建议：

用户问题：{query}
对话历史：{conversation_history}

请生成3-5个不同风格的回复选项：
1. 简洁直接型
2. 详细解释型
3. 友好关怀型
4. 专业术语型
5. 引导询问型

每个回复都应该准确、有帮助且符合客服标准。
"""

# 知识库搜索提示词
KNOWLEDGE_BASE_SEARCH_PROMPT = """
在知识库中搜索相关信息：

搜索关键词：{keywords}
用户问题：{query}

搜索范围：
- 产品信息
- 服务政策
- 常见问题
- 操作指南
- 故障排除

请返回最相关的信息，并按相关性排序。
"""

# 对话总结提示词
CONVERSATION_SUMMARY_PROMPT = """
请总结这次客服对话：

对话内容：{conversation}

请提供：
1. 对话摘要
2. 主要问题
3. 解决方案
4. 用户满意度
5. 后续跟进建议
6. 服务评价

确保总结准确、简洁且有价值。
"""

# 提示词模板字典
PROMPTS = {
    "system": SYSTEM_PROMPT,
    "customer_service": CUSTOMER_SERVICE_PROMPT,
    "sentiment_analysis": SENTIMENT_ANALYSIS_PROMPT,
    "query_classification": QUERY_CLASSIFICATION_PROMPT,
    "product_recommendation": PRODUCT_RECOMMENDATION_PROMPT,
    "order_inquiry": ORDER_INQUIRY_PROMPT,
    "faq_response": FAQ_RESPONSE_PROMPT,
    "human_escalation": HUMAN_ESCALATION_PROMPT,
    "satisfaction_survey": SATISFACTION_SURVEY_PROMPT,
    "smart_reply_suggestions": SMART_REPLY_SUGGESTIONS_PROMPT,
    "knowledge_base_search": KNOWLEDGE_BASE_SEARCH_PROMPT,
    "conversation_summary": CONVERSATION_SUMMARY_PROMPT
}


def get_prompt(prompt_type: str, **kwargs) -> str:
    """
    获取格式化的提示词
    
    Args:
        prompt_type: 提示词类型
        **kwargs: 格式化参数
        
    Returns:
        格式化后的提示词
    """
    if prompt_type not in PROMPTS:
        raise ValueError(f"Unknown prompt type: {prompt_type}")
    
    template = PROMPTS[prompt_type]
    
    try:
        return template.format(**kwargs)
    except KeyError as e:
        raise ValueError(f"Missing required parameter for prompt '{prompt_type}': {e}")


def list_available_prompts() -> list:
    """
    列出所有可用的提示词类型
    
    Returns:
        提示词类型列表
    """
    return list(PROMPTS.keys())


def validate_prompt_parameters(prompt_type: str, **kwargs) -> bool:
    """
    验证提示词参数是否完整
    
    Args:
        prompt_type: 提示词类型
        **kwargs: 参数字典
        
    Returns:
        是否验证通过
    """
    if prompt_type not in PROMPTS:
        return False
    
    template = PROMPTS[prompt_type]
    
    # 提取模板中的所有参数
    import re
    parameters = re.findall(r'\{(\w+)\}', template)
    
    # 检查是否所有参数都已提供
    for param in parameters:
        if param not in kwargs:
            return False
    
    return True


from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate


def create_base_chat_prompt(user_input: str, context: str = "") -> str:
    """
    创建基础聊天提示词
    
    Args:
        user_input: 用户输入
        context: 上下文信息
        
    Returns:
        格式化的提示词
    """
    base_prompt = f"""
{SYSTEM_PROMPT}

{f"上下文信息：{context}" if context else ""}

用户问题：{user_input}

请提供专业、友好的回复。
"""
    return base_prompt


def create_base_chat_prompt_template() -> ChatPromptTemplate:
    """
    创建基础聊天提示词模板（用于LangChain）
    
    Returns:
        ChatPromptTemplate对象
    """
    return ChatPromptTemplate.from_messages([
        ("system", SYSTEM_PROMPT + "\n\n对话历史：{chat_history}"),
        ("user", "{user_input}")
    ])


def create_structured_output_prompt(query: str, output_format: str) -> str:
    """
    创建结构化输出提示词
    
    Args:
        query: 查询内容
        output_format: 输出格式说明
        
    Returns:
        格式化的提示词
    """
    prompt = f"""
请根据以下查询内容，按照指定格式返回结构化的回答：

查询内容：{query}

输出格式要求：
{output_format}

请确保回答准确、完整，并严格按照指定格式输出。
"""
    return prompt


def create_structured_output_prompt_template() -> ChatPromptTemplate:
    """
    创建结构化输出提示词模板（用于LangChain）
    
    Returns:
        ChatPromptTemplate对象
    """
    return ChatPromptTemplate.from_messages([
        ("system", """你是一个专业的数据分析助手，擅长将信息以结构化的方式呈现。
请根据用户的查询内容，按照指定格式返回结构化的回答。

输出格式要求：{output_format}

请确保回答准确、完整，并严格按照指定格式输出。"""),
        ("user", "{user_input}")
    ])


def create_classification_prompt(text: str, categories: list) -> str:
    """
    创建分类提示词
    
    Args:
        text: 待分类文本
        categories: 分类选项列表
        
    Returns:
        格式化的提示词
    """
    categories_str = "\n".join([f"- {cat}" for cat in categories])
    
    prompt = f"""
请将以下文本分类到最合适的类别：

文本内容：{text}

可选分类：
{categories_str}

请返回分类结果，并简述分类理由。
"""
    return prompt


def create_classification_prompt_template() -> ChatPromptTemplate:
    """
    创建分类提示词模板（用于LangChain）
    
    Returns:
        ChatPromptTemplate对象
    """
    return ChatPromptTemplate.from_messages([
        ("system", """你是一个专业的文本分类助手，擅长将文本内容分类到合适的类别。

请将用户输入的文本分类到以下类别之一：
- general_inquiry: 一般咨询
- technical_support: 技术支持
- complaint: 投诉建议
- information_request: 信息查询
- weather_query: 天气查询
- time_query: 时间查询
- other: 其他

请只返回分类结果，不要额外解释。"""),
        ("user", "{user_input}")
    ])
